home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / usr / include / sound / memalloc.h < prev    next >
C/C++ Source or Header  |  2006-01-09  |  4KB  |  119 lines

  1. /*
  2.  *  Copyright (c) by Jaroslav Kysela <perex@suse.cz>
  3.  *                   Takashi Iwai <tiwai@suse.de>
  4.  * 
  5.  *  Generic memory allocators
  6.  *
  7.  *
  8.  *   This program is free software; you can redistribute it and/or modify
  9.  *   it under the terms of the GNU General Public License as published by
  10.  *   the Free Software Foundation; either version 2 of the License, or
  11.  *   (at your option) any later version.
  12.  *
  13.  *   This program is distributed in the hope that it will be useful,
  14.  *   but WITHOUT ANY WARRANTY; without even the implied warranty of
  15.  *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  16.  *   GNU General Public License for more details.
  17.  *
  18.  *   You should have received a copy of the GNU General Public License
  19.  *   along with this program; if not, write to the Free Software
  20.  *   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
  21.  *
  22.  */
  23.  
  24. #ifndef __SOUND_MEMALLOC_H
  25. #define __SOUND_MEMALLOC_H
  26.  
  27. struct device;
  28.  
  29. /*
  30.  * buffer device info
  31.  */
  32. struct snd_dma_device {
  33.     int type;            /* SNDRV_DMA_TYPE_XXX */
  34.     struct device *dev;        /* generic device */
  35. };
  36.  
  37. #ifndef snd_dma_pci_data
  38. #define snd_dma_pci_data(pci)    (&(pci)->dev)
  39. #define snd_dma_isa_data()    NULL
  40. #define snd_dma_sbus_data(sbus)    ((struct device *)(sbus))
  41. #define snd_dma_continuous_data(x)    ((struct device *)(unsigned long)(x))
  42. #endif
  43.  
  44.  
  45. /*
  46.  * buffer types
  47.  */
  48. #define SNDRV_DMA_TYPE_UNKNOWN        0    /* not defined */
  49. #define SNDRV_DMA_TYPE_CONTINUOUS    1    /* continuous no-DMA memory */
  50. #define SNDRV_DMA_TYPE_DEV        2    /* generic device continuous */
  51. #define SNDRV_DMA_TYPE_DEV_SG        3    /* generic device SG-buffer */
  52. #define SNDRV_DMA_TYPE_SBUS        4    /* SBUS continuous */
  53.  
  54. /*
  55.  * info for buffer allocation
  56.  */
  57. struct snd_dma_buffer {
  58.     struct snd_dma_device dev;    /* device type */
  59.     unsigned char *area;    /* virtual pointer */
  60.     dma_addr_t addr;    /* physical address */
  61.     size_t bytes;        /* buffer size in bytes */
  62.     void *private_data;    /* private for allocator; don't touch */
  63. };
  64.  
  65. /*
  66.  * Scatter-Gather generic device pages
  67.  */
  68. struct snd_sg_page {
  69.     void *buf;
  70.     dma_addr_t addr;
  71. };
  72.  
  73. struct snd_sg_buf {
  74.     int size;    /* allocated byte size */
  75.     int pages;    /* allocated pages */
  76.     int tblsize;    /* allocated table size */
  77.     struct snd_sg_page *table;    /* address table */
  78.     struct page **page_table;    /* page table (for vmap/vunmap) */
  79.     struct device *dev;
  80. };
  81.  
  82. /*
  83.  * return the pages matching with the given byte size
  84.  */
  85. static inline unsigned int snd_sgbuf_aligned_pages(size_t size)
  86. {
  87.     return (size + PAGE_SIZE - 1) >> PAGE_SHIFT;
  88. }
  89.  
  90. /*
  91.  * return the physical address at the corresponding offset
  92.  */
  93. static inline dma_addr_t snd_sgbuf_get_addr(struct snd_sg_buf *sgbuf, size_t offset)
  94. {
  95.     return sgbuf->table[offset >> PAGE_SHIFT].addr + offset % PAGE_SIZE;
  96. }
  97.  
  98.  
  99. /* allocate/release a buffer */
  100. int snd_dma_alloc_pages(int type, struct device *dev, size_t size,
  101.             struct snd_dma_buffer *dmab);
  102. int snd_dma_alloc_pages_fallback(int type, struct device *dev, size_t size,
  103.                                  struct snd_dma_buffer *dmab);
  104. void snd_dma_free_pages(struct snd_dma_buffer *dmab);
  105.  
  106. /* buffer-preservation managements */
  107.  
  108. #define snd_dma_pci_buf_id(pci)    (((unsigned int)(pci)->vendor << 16) | (pci)->device)
  109.  
  110. size_t snd_dma_get_reserved_buf(struct snd_dma_buffer *dmab, unsigned int id);
  111. int snd_dma_reserve_buf(struct snd_dma_buffer *dmab, unsigned int id);
  112.  
  113. /* basic memory allocation functions */
  114. void *snd_malloc_pages(size_t size, gfp_t gfp_flags);
  115. void snd_free_pages(void *ptr, size_t size);
  116.  
  117. #endif /* __SOUND_MEMALLOC_H */
  118.  
  119.